#ifndef LICENSE_H
#define LICENSE_H

// openssl genrsa  -out                   private.key 2048
// openssl rsa     -pubout         -in    private.key                                      -out public.key

// openssl rsautl  -sign           -inkey private.key       -keyform PEM  -in data.txt     -out data.sign
// openssl rsautl  -verify         -inkey public.key        -pubin        -in data.sign

// openssl rsautl  -encrypt -pubin -inkey public.key                      -in data.txt     -out data.encrypt
// openssl rsautl  -decrypt        -inkey private.key                     -in data.encrypt

// openssl x509    -pubkey  -noout -in    certificate.crt                 >   public_key.pem
// openssl rsautl  -verify         -inkey certificate.crt   -certin       -in data.sign

#include <openssl/x509.h>
#include <openssl/x509_vfy.h>
#include <openssl/pem.h>
#include <openssl/err.h>

#define ERR_NONE                     0

// DECRYPT
#define ERR_EMMC_KEY_OPEN            0x01
#define ERR_EMMC_KEY_WRITE           0x02
#define ERR_EMMC_KEY_SIZE            0x03
#define ERR_FILE_KEY_OPEN            0x03
#define ERR_FILE_KEY_READ            0x04
#define ERR_KEY_EN_OPEN              0x05
#define ERR_KEY_DE_OPEN              0x06
#define ERR_RSA_SIZE                 0x07
#define ERR_RSAIN_MALLOC             0x08
#define ERR_RSAOUT_MALLOC            0x09
#define ERR_KEY_DE                   0x0A
#define ERR_KEY_EN_R                 0x0B
#define ERR_KEY_DE_W                 0x0C
#define ERR_AES_TK                   0x0D
#define ERR_FILE_EN_OPEN             0x0E
#define ERR_FILE_DE_INIT             0x0F
#define ERR_FILE_DE_UPDATE           0x10
#define ERR_FILE_DE_OPEN             0x11
#define ERR_FILE_DE_W                0x12
#define ERR_FILE_DE_FINAL            0x13

class License
{
public:
    License();

    void rsa_init(void);

    /*
    *****************************************************************************************
    *	函 数 名: rsa_sign
    *	功能说明: RSA使用私钥签名
    *	形    参:    key        :   私钥
    *               file_in    :   输入需要签名的文件
    *               file_out   :   签名后生成的文件
    *	返 回 值: 0：成功, 其他：失败
    *****************************************************************************************
    */
    int rsa_sign(const char *pri_key, const char *file_in, const char *file_out);
    /*
    *****************************************************************************************
    *	函 数 名: rsa_verify
    *	功能说明: RSA使用公钥验签
    *	形    参:    key        :   私钥
    *               file_in    :   输入需要签名的文件
    *               file_out   :   签名后生成的文件
    *	返 回 值: 0：成功, 其他：失败
    *****************************************************************************************
    */
    int rsa_verify(const char *pri_key, const char *file_in,const char *file_out);
};

#endif // LICENSE_H
